package com.javaweb.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.sql.Time;
import java.util.Timer;

/**
 * &#064;desc:  todo: 实现对 DAO层的所有方法的执行进行日志输出，日志信息
 *              包括如下：
 *              1） 方法名字
 *              2） 执行消耗时间（S）
 * &#064;author:  lyt0628
 * &#064;date:  2024.10.7
 */

@Slf4j
@Aspect
@Component
public class LogAspect {

    @Pointcut("execution(* com.javaweb.dao..*.*(..))")
    public void daoPointCut(){}


    @Around(value = "com.javaweb.aop.LogAspect.daoPointCut()")
    public void monitorTime(ProceedingJoinPoint pjp){
        try {
            var beg = System.currentTimeMillis();
            pjp.proceed();
            var end = System.currentTimeMillis();
            log.info("Method {} cost time : {}", pjp.getSignature().getName(), end - beg);
        } catch (Throwable e) {
            log.error("Method failed");
        }
    }
}
